package com.hjimi.ski.utils;

import android.annotation.SuppressLint;
import android.content.Context;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;

import com.hjimi.ski.bean.SyncImageListBean;

import java.io.File;
import java.io.FileFilter;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * Created By 孙岩
 * on 2022/12/15
 */
public class SdcardUtils {
    /**
     * 从sd卡获取图片资源
     *
     * @return
     */
    public static List<String> getImagePathFromSD() {
        // 图片列表
        List<String> imagePathList = new ArrayList<String>();
        // 得到sd卡内image文件夹的路径   File.separator(/)
        String filePath = Environment.getExternalStorageDirectory().toString() + File.separator
                + "Pic/app/";
        // 得到该路径文件夹下所有的文件

        File fileAll = new File(filePath);
        File[] files = fileAll.listFiles();
        // 将所有的文件存入ArrayList中,并过滤所有图片格式的文件

        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                File file = files[i];
                if (checkIsImageFile(file.getPath())) {
                    imagePathList.add(file.getPath());
                }
            }
        }

        // 返回得到的图片列表
        return imagePathList;
    }

    /**
     * 获取音频列表
     * @return
     */
    public static List<String> getAudioPathFromSD() {
        // 图片列表
        List<String> imagePathList = new ArrayList<String>();
        // 得到sd卡内image文件夹的路径   File.separator(/)
        String filePath = Environment.getExternalStorageDirectory().toString() + File.separator
                + "Pic/audio/";
        // 得到该路径文件夹下所有的文件

        File fileAll = new File(filePath);
        File[] files = fileAll.listFiles();
        // 将所有的文件存入ArrayList中,并过滤所有图片格式的文件

        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                File file = files[i];
                imagePathList.add(file.getPath());
            }
        }

        // 返回得到的图片列表
        return imagePathList;
    }

    /**
     * 获取所有本地路径"/storage/emulated/0/Pic/app/"下的文件名称
     * @return
     */
    public static List<String> getImageNameFromSD() {
        // 图片列表
        List<String> imagePathList = new ArrayList<String>();
        // 得到sd卡内image文件夹的路径   File.separator(/)
        String filePath = Environment.getExternalStorageDirectory().toString() + File.separator
                + "Pic/app/";
        // 得到该路径文件夹下所有的文件
        Log.d("sunyan", "getImageNameFromSD......filepath=" + filePath);
        File fileAll = new File(filePath);
        File[] files = fileAll.listFiles();
        // 将所有的文件存入ArrayList中,并过滤所有图片格式的文件

        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                File file = files[i];
                if (checkIsImageFile(file.getPath())) {
                    imagePathList.add(file.getName());
                }
            }
        }

        // 返回得到的图片列表
        return imagePathList;
    }

    /**
     * 检查扩展名，得到图片格式的文件
     *
     * @param fName 文件名
     * @return
     */
    @SuppressLint("DefaultLocale")
    public static boolean checkIsImageFile(String fName) {
        boolean isImageFile = false;
        // 获取扩展名
        String FileEnd = fName.substring(fName.lastIndexOf(".") + 1,
                fName.length()).toLowerCase();
        if (FileEnd.equals("jpg") || FileEnd.equals("png") || FileEnd.equals("gif")
                || FileEnd.equals("jpeg") || FileEnd.equals("bmp")||FileEnd.endsWith("mp3")||FileEnd.endsWith("mp4")) {
            isImageFile = true;
        } else {
            isImageFile = false;
        }
        return isImageFile;
    }


    /**
     * 删除单个文件
     *
     * @param filePath$Name 要删除的文件的文件名
     * @return 单个文件删除成功返回true，否则返回false
     */
    public static boolean deleteSingleFile(Context context, String filePath$Name) {
        String filePath = Environment.getExternalStorageDirectory().toString() + File.separator
                + "Pic/app/" + filePath$Name;
        File file = new File(filePath);
        // 如果文件路径所对应的文件存在，并且是一个文件，则直接删除
        if (file.exists() && file.isFile()) {
            if (file.delete()) {
                Log.d("sunyan","删除文件成功");
                return true;
            } else {
                Log.d("sunyan","删除文件失败");
                return false;
            }
        } else {
            return false;
        }
    }

    public static void deleteFile(){
        // 指定要删除的文件夹路径
        String folderPath = "/storage/emulated/0/Pic/app/";

        // 获取要删除的文件夹对象
        File folder = new File(folderPath);

        // 如果文件夹存在
        if(folder.exists()){
            // 获取文件夹中的所有文件和子文件夹
            File[] files = folder.listFiles();

            // 如果有文件或子文件夹
            if(files != null){
                for(File f: files){
                    // 删除文件或子文件夹
                    if(f.isDirectory()){
                        deleteFolder(f);
                    } else {
                        f.delete();
                    }
                }
            }
            // 删除文件夹
            folder.delete();
        }
        System.out.println("Folder deleted successfully");
        Log.d("sunyan","删除成功");
    }

    public static void deleteFileAudio(){
        // 指定要删除的文件夹路径
        String folderPath = "/storage/emulated/0/Pic/audio/";

        // 获取要删除的文件夹对象
        File folder = new File(folderPath);

        // 如果文件夹存在
        if(folder.exists()){
            // 获取文件夹中的所有文件和子文件夹
            File[] files = folder.listFiles();

            // 如果有文件或子文件夹
            if(files != null){
                for(File f: files){
                    // 删除文件或子文件夹
                    if(f.isDirectory()){
                        deleteFolder(f);
                    } else {
                        f.delete();
                    }
                }
            }
            // 删除文件夹
            folder.delete();
        }
        System.out.println("Folder deleted successfully");
        Log.d("sunyan","删除成功");
    }

    public static void deleteFolder(File folder){
        if(folder.exists()){
            // 列出当前目录下的所有文件和子目录
            File[] files = folder.listFiles();
            if(files != null){ //some JVMs return null for empty dirs
                for(File f: files){
                    // 如果是目录，递归处理
                    if(f.isDirectory()){
                        deleteFolder(f);
                    } else {
                        // 如果是文件，直接删除
                        f.delete();
                    }
                }
            }
            // 删除当前目录
            folder.delete();
        }
    }

    //获取对应的本地图片

    /**
     * 当前轮播的位置 position
     *  轮播列表数据
     * @param position
     * @param list
     */
    public static String getImageInPhone(int position,List<SyncImageListBean.DataBean> list){
        //本地图片列表
        List<String> onDown  = SdcardUtils.getImagePathFromSD();
        int i=0;
        for(int j=0;j<onDown.size();j++){
            if(onDown.get(j).split("@")[0].equals("/storage/emulated/0/Pic/app/"+list.get(position).getId())){
                if(onDown.get(j).split("@")[1].endsWith(".jpg")){
                    i=j;
                }
            }
        }

        return onDown.get(i);
    }

    /**
     * 当前轮播的位置 position
     * @param position
     * @param list
     * @return
     */
    public static String getAudioInPhone(int position,List<SyncImageListBean.DataBean> list){
        //本地图片列表
        List<String> onDown  = SdcardUtils.getImagePathFromSD();
        int i=0;
        for(int j=0;j<onDown.size();j++){
            if(onDown.get(j).split("@")[0].equals("/storage/emulated/0/Pic/app/"+list.get(position).getId())){

                if(onDown.get(j).split("@")[1].endsWith(".mp3")){
                    i=j;
                }

            }
        }

        return onDown.get(i);
    }


    /**
     * 获取对应的url
     */
    public static List<String> imageDown(List<SyncImageListBean.DataBean> list,List<String> down1List){
        List<String> url = new ArrayList<>();
        for(int i=0;i<list.size();i++){
            for(int j=0;j<down1List.size();j++){
                if(down1List.get(j).split("@")[0].equals(String.valueOf(list.get(i).getId()))){
                    if(down1List.get(j).endsWith(".jpg")){
                        url.add(list.get(i).getId()+"@"+list.get(i).getImageUrl());
                    }else if(down1List.get(j).endsWith(".mp3")){
                        url.add(list.get(i).getId()+"@"+list.get(i).getBgm_config().getBgm_url());
                    }

                }
            }
        }

        return url;
    }

    /**
     * 根据id获取本地路径
     */
    public static String getPathFromId(int id){
        String path = "";
        List<String> downList = getImagePathFromSD();
        for(int i=0;i<downList.size();i++){
            if(downList.get(i).split("@")[0].equals(String.valueOf(id))){
                path = downList.get(i);
            }
        }

        return path;
    }
}
